const {prisma, minioClient, mqttClient}=require('./utils.js')

class NotificationController{
    /**
     * GET：获取用户所有通知信息
     * /notification/:user_id/all
     * @param {int} req.params.user_id
     * @returns
     * 500 内部错误
     * 200 [{...},...]
     */
    async all(req,res){
        var user_id=Number(req.params.user_id)
        var notifications=await prisma.notification.findMany({
            where:{user_id:user_id}
        })
        res.send(200,notifications)
    }

    /**
     * GET：获取用户所有通知信息数
     * /notification/:user_id/count
     * @param {int} req.params.user_id
     * @returns
     * 500 内部错误
     * 200 [{...},...]
     */
    async count(req,res){
        var user_id=Number(req.params.user_id)
        var num=await prisma.notification.count({
            where:{user_id:user_id}
        })
        res.send(200,num)
    }

    /**
     * DELETE：删除通知
     * /notification/:id
     * @param {int} req.params.id
     * @returns
     * 500 内部错误
     * 404 未找到通知
     * 200
     */
    async remove(req,res){
        var id=Number(req.params.id)
        try{
            var ret=await prisma.notification.findUnique({where:{id:id}})
            if(ret==null){
                res.send(404)
                return
            }
            await prisma.notification.delete({where:{id:id}})
            delete ret.id
            await prisma.notificationHistory.create({data:ret})
            res.send(200)
            mqttClient.publish(`/user/${ret.user_id}`,'notification_count')
        }catch(err){
            console.error(err)
        }
    }
}

module.exports=new NotificationController()